package com.uoko.common.math;

import com.uoko.common.validate.ValidateUtil;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

/**
 * <p>
 *
 * </p>
 *
 * @author xianguo
 * Email xianguo@uoko.com
 * created by 2018/6/6 0006
 */
public class BigDecimalUtil {
    /**
     * 加
     * @param bigDecimal
     * @param val
     * @return 失败反回原bigDecimal
     */
    public static BigDecimal add(BigDecimal bigDecimal, BigDecimal val) {
        if (ValidateUtil.isNotNull(bigDecimal,val))
            bigDecimal = bigDecimal.add(val);
        return bigDecimal;
    }

    /**
     * 加
     * @param bigDecimal
     * @param val
     * @return 失败反回原null
     */
    public static BigDecimal addReal(BigDecimal bigDecimal,BigDecimal val) {
        if (ValidateUtil.isNotNull(bigDecimal,val))
            bigDecimal = bigDecimal.add(val);
        return null;
    }

    /**
     * 加
     * @param bigDecimal
     * @param val
     * @return 失败反回原bigDecimal
     */
    public static BigDecimal add(BigDecimal bigDecimal,Double val) {
        if (ValidateUtil.isNotNull(bigDecimal,val))
            bigDecimal = bigDecimal.add(new BigDecimal(val));
        return bigDecimal;
    }

    /**
     * 除
     * @param bigDecimal
     * @param val
     * @param mathContext
     * @return
     */
    public static BigDecimal divide(BigDecimal bigDecimal,BigDecimal val,MathContext mathContext) {
        if (ValidateUtil.isNotNull(bigDecimal,val) && !BigDecimal.ZERO.equals(val)) {
            bigDecimal = bigDecimal.divide(val,mathContext);
        }
        return bigDecimal;
    }

    /**
     * 判断传入BigDecimal是否null
     * @param o
     * @return
     */
    public static BigDecimal isBigDecimal(BigDecimal o){
        if(o==null){
            return new BigDecimal(0);
        }
        return (BigDecimal)o;
    }

//    public static void main(String[] args) {
//        BigDecimal b1 = new BigDecimal("62");
//        BigDecimal b2 = new BigDecimal("1520");
//        System.out.println(b1.divide(b2,new MathContext(3, RoundingMode.HALF_DOWN)));
//    }
}
